﻿using System;
using App.Controlador;
using App.Controlador.Seguridad;
using App.Modelo;
using System.Windows.Forms;
using App.Seguridad.Vista.Forms;
using App.Seguridad.Vista.Menu;
using App.reports;

namespace App.Git.Vista
{
    internal class Registry : IDisposable
    {
        private ControladoraFacade _Controlador;


        #region <<singleton>> Registry

        private static volatile Registry _instance = null;

        private static readonly object padlock = new object();

        public static Registry Instance
        {
            get
            {
                if (_instance == null)
                {
                    lock (padlock)
                    {
                        if (_instance == null)
                            _instance = new Registry();
                    }
                }
                return _instance;
            }
        }
        protected Registry() { }

        #endregion

        /**
         * Retorna una instancia de la fachada del modulo controladora
         */
        public ControladoraFacade Controlador
        {
            get
            {
                if (_Controlador == null)
                    _Controlador = new ControladoraFacade();

                
                return _Controlador;
            }
        }


        public void RegisterForm(Form form)
        {
            //if (MdiParent != null)
            //{
                // form.MdiParent = MdiParent;
            //}
        }


        private Usuario _UsuarioActual;
        /**
         * el usuario actual de la session
         */
        public Usuario UsuarioActual { get {
            return _UsuarioActual;
        }
            set
            {
                _UsuarioActual = value;
                Controlador.UsuarioActual = _UsuarioActual;
            
            }
        }

        #region IDisposable Members

        public void Dispose()
        {
            _Controlador.Dispose();
            UsuarioActual = null;
        }

        #endregion

        private ReportFacade _Reportes;
        public ReportFacade Reportes
        {
            get
            {
                if (_Reportes == null)
                {
                    _Reportes = new ReportFacade();
                }
                return _Reportes;
            }
        }



			
            
			
    }
}
